package com.hlj.ncp.product.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hlj.ncp.product.entity.AgriProduct;
import com.hlj.ncp.product.mapper.AgriProductMapper;
import com.hlj.ncp.product.service.IAgriProductService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

/**
 * 农产品信息 服务层实现
 */
@Service
public class AgriProductServiceImpl extends ServiceImpl<AgriProductMapper, AgriProduct> implements IAgriProductService {

    /**
     * 查询农产品信息列表
     * 
     * @param agriProduct 农产品信息
     * @return 农产品信息
     */
    @Override
    public List<AgriProduct> selectAgriProductList(AgriProduct agriProduct) {
        LambdaQueryWrapper<AgriProduct> queryWrapper = new LambdaQueryWrapper<>();
        
        // 构建查询条件
        if (agriProduct != null) {
            // 按农产品编号查询
            if (StringUtils.isNotBlank(agriProduct.getProductCode())) {
                queryWrapper.like(AgriProduct::getProductCode, agriProduct.getProductCode());
            }
            
            // 按农产品名称查询
            if (StringUtils.isNotBlank(agriProduct.getProductName())) {
                queryWrapper.like(AgriProduct::getProductName, agriProduct.getProductName());
            }
            
            // 按农产品类别查询
            if (StringUtils.isNotBlank(agriProduct.getCategory())) {
                queryWrapper.eq(AgriProduct::getCategory, agriProduct.getCategory());
            }
            
            // 按产地查询
            if (StringUtils.isNotBlank(agriProduct.getOrigin())) {
                queryWrapper.like(AgriProduct::getOrigin, agriProduct.getOrigin());
            }
            
            // 按生产商/农户查询
            if (StringUtils.isNotBlank(agriProduct.getProducer())) {
                queryWrapper.like(AgriProduct::getProducer, agriProduct.getProducer());
            }
            
            // 按状态查询
            if (StringUtils.isNotBlank(agriProduct.getStatus())) {
                queryWrapper.eq(AgriProduct::getStatus, agriProduct.getStatus());
            }
        }
        
        // 默认按创建时间降序排序
        queryWrapper.orderByDesc(AgriProduct::getCreateTime);
        
        return this.list(queryWrapper);
    }

    /**
     * 查询农产品信息
     * 
     * @param agriProductId 农产品ID
     * @return 农产品信息
     */
    @Override
    public AgriProduct selectAgriProductById(Long agriProductId) {
        return this.getById(agriProductId);
    }

    /**
     * 新增农产品信息
     * 
     * @param agriProduct 农产品信息
     * @return 结果
     */
    @Override
    public int insertAgriProduct(AgriProduct agriProduct) {
        // 设置创建时间
        agriProduct.setCreateTime(LocalDateTime.now());
        
        // 如果没有设置状态，默认为正常
        if (StringUtils.isBlank(agriProduct.getStatus())) {
            agriProduct.setStatus("0");
        }
        
        // 生成农产品编号（如果没有提供）
        if (StringUtils.isBlank(agriProduct.getProductCode())) {
            // 生成格式为：AP + 年月日 + 4位随机数
            String dateStr = LocalDateTime.now().toString().replaceAll("[-:T.]", "").substring(0, 8);
            String randomNum = String.format("%04d", (int)(Math.random() * 10000));
            agriProduct.setProductCode("AP" + dateStr + randomNum);
        }
        
        return this.save(agriProduct) ? 1 : 0;
    }

    /**
     * 修改农产品信息
     * 
     * @param agriProduct 农产品信息
     * @return 结果
     */
    @Override
    public int updateAgriProduct(AgriProduct agriProduct) {
        // 设置更新时间
        agriProduct.setUpdateTime(LocalDateTime.now());
        
        return this.updateById(agriProduct) ? 1 : 0;
    }

    /**
     * 批量删除农产品信息
     * 
     * @param agriProductIds 需要删除的农产品ID
     * @return 结果
     */
    @Override
    public int deleteAgriProductByIds(Long[] agriProductIds) {
        return this.removeByIds(Arrays.asList(agriProductIds)) ? agriProductIds.length : 0;
    }

    /**
     * 删除农产品信息信息
     * 
     * @param agriProductId 农产品ID
     * @return 结果
     */
    @Override
    public int deleteAgriProductById(Long agriProductId) {
        return this.removeById(agriProductId) ? 1 : 0;
    }
} 